﻿Public Class ArtikelSamenstelling

    Private _samengesteldeArtikelIds As List(Of Integer)

    Public Sub New()
        ' id's slechts eenmaal ophalen
        _samengesteldeArtikelIds = SamengesteldeArtikelsDal.GetHoofdartikelIds()
    End Sub

    Public Function GetArtikels(ByVal artikelRij As ArtikelsDataSet.ArtikelsRow) As List(Of Artikel)
        Dim list As New List(Of Artikel)
        If (_samengesteldeArtikelIds.Contains(artikelRij.Id)) Then
            ' het is een samengesteld artikel
            ' splits het op in deelartikels, en voeg deze toe
            Dim samengesteldeArtikels As New ArtikelLijstDataSet
            SamengesteldeArtikelsDal.FillDeelartikels(artikelRij.Id, samengesteldeArtikels)
            Dim adapter As New ArtikelsDataSetTableAdapters.ArtikelsTableAdapter()
            For Each row As ArtikelLijstDataSet.ArtikelsRow In samengesteldeArtikels.Artikels
                ' voeg dit deelartikel toe
                Dim deelArtikelId As Integer = row.Id
                Dim deelArtikelRij As ArtikelsDataSet.ArtikelsRow = Utility.Data.Artikels.FindById(deelArtikelId)
                list.Add(New Artikel(deelArtikelRij, row.Aantal))
            Next
        Else
            list.Add(New Artikel(artikelRij, 1))
        End If
        Return list
    End Function

    Public Function GetArtikelIds(ByVal artikelId As Integer) As List(Of ArtikelId)
        Dim list As New List(Of ArtikelId)
        If (_samengesteldeArtikelIds.Contains(artikelId)) Then
            ' het is een samengesteld artikel
            ' splits het op in deelartikels, en voeg deze toe
            Dim samengesteldeArtikels As New ArtikelLijstDataSet
            SamengesteldeArtikelsDal.FillDeelartikels(artikelId, samengesteldeArtikels)
            For Each row As ArtikelLijstDataSet.ArtikelsRow In samengesteldeArtikels.Artikels
                ' voeg dit deelartikel toe
                list.Add(New ArtikelId(row.Id, row.Aantal))
            Next
        Else
            list.Add(New ArtikelId(artikelId, 1))
        End If
        Return list
    End Function

    ''' <summary>
    ''' Om een nieuw toegevoegd samengesteld artikel direct toegankelijk te maken in de schermen
    ''' </summary>
    ''' <param name="hoofdartikelId"></param>
    Public Sub AddHoofdArtikelId(ByVal hoofdartikelId As Integer)
        _samengesteldeArtikelIds.Add(hoofdartikelId)
    End Sub

    Public Class Artikel
        Public ArtikelRij As ArtikelsDataSet.ArtikelsRow
        Public Aantal As Integer

        Public Sub New(ByVal xArtikelRij As ArtikelsDataSet.ArtikelsRow, ByVal xAantal As Integer)
            ArtikelRij = xArtikelRij
            Aantal = xAantal
        End Sub
    End Class

    Public Class ArtikelId
        Public Id As Integer
        Public Aantal As Integer

        Public Sub New(ByVal xId As Integer, ByVal xAantal As Integer)
            Id = xId
            Aantal = xAantal
        End Sub
    End Class

End Class
